// 傅钟添加，接收FPGA传输过来的ADSB MSG消息，大小为24Bytes
#ifndef ISS_FPGA2ADSB_DATA_H
#define ISS_FPGA2ADSB_DATA_H
#include "../../General/selfDataType.h"
#include "../../../ADSB_RPTGEN/encodeReportStruct.h"

#pragma pack(1) // 一字节对齐

// 大小为4字节
typedef struct
{
    U32 adsb_broadcast_monitor_fault : 1; // ADS-B广播监控故障

    U32 top_1_chn_tx_fault           : 1; // 上天线1通道发射故障
    U32 top_2_chn_tx_fault           : 1; // 上天线2通道发射故障
    U32 top_3_chn_tx_fault           : 1; // 上天线3通道发射故障
    U32 top_4_chn_tx_fault           : 1; // 上天线4通道发射故障
    U32 bot_1_chn_tx_fault           : 1; // 下天线1通道发射故障
    U32 bot_2_chn_tx_fault           : 1; // 下天线2通道发射故障
    U32 bot_3_chn_tx_fault           : 1; // 下天线3通道发射故障
    U32 bot_4_chn_tx_fault           : 1; // 下天线4通道发射故障

    U32 top_1_chn_rx_fault           : 1; // 上天线1通道接收故障
    U32 top_2_chn_rx_fault           : 1; // 上天线2通道接收故障
    U32 top_3_chn_rx_fault           : 1; // 上天线3通道接收故障
    U32 top_4_chn_rx_fault           : 1; // 上天线4通道接收故障
    U32 bot_1_chn_rx_fault           : 1; // 下天线1通道接收故障
    U32 bot_2_chn_rx_fault           : 1; // 下天线2通道接收故障
    U32 bot_3_chn_rx_fault           : 1; // 下天线3通道接收故障
    U32 bot_4_chn_rx_fault           : 1; // 下天线4通道接收故障

    U32 top_1_chn_impedance_fault    : 1; // 上天线1通道阻抗检测
    U32 top_2_chn_impedance_fault    : 1; // 上天线2通道阻抗检测
    U32 top_3_chn_impedance_fault    : 1; // 上天线3通道阻抗检测
    U32 top_4_chn_impedance_fault    : 1; // 上天线4通道阻抗检测
    U32 bot_1_chn_impedance_fault    : 1; // 下天线1通道阻抗检测
    U32 bot_2_chn_impedance_fault    : 1; // 下天线2通道阻抗检测
    U32 bot_3_chn_impedance_fault    : 1; // 下天线3通道阻抗检测
    U32 bot_4_chn_impedance_fault    : 1; // 下天线4通道阻抗检测

    U32 pad                          : 7; // 预留
} FAULT_REPORTED_BY_FPGA;

// 大小为24Bytes
typedef struct
{
    /*************************最新的fpga传输结构****************************************/
    U64 validityFlag                : 1; // 有效位,1 为无效， 0 为有效
    U64 year                        :14;
    U64 month                       : 4;
    U64 day                         : 5;
    U64 hour                        : 5;
    U64 minute_high                 : 3;
    U64 minute_low                  : 3;
    U64 secend                      : 6;
    U64 millisecond                 :10;
    U64 reserve                     :13; // 预留位

    U8 msgInfo1[14];                   // 数据内容
    U8 signLevel;                      // 信号电平

    unsigned char receiveAntennas : 1; // 接收天线
    unsigned char reserved : 7;        // 预留位
    /*************************最新的fpga传输结构****************************************/
    /*************************之前的fpga传输结构****************************************/
//     U64 validityFlag : 1; // 有效位,1 为无效， 0 为有效
//     U64 year : 14;
//     U64 month : 4;
//     U64 day : 5;
//     U64 hour : 5;
//     U64 minute : 6;
//     U64 secend : 6;
//     U64 millisecond : 10;
//     U64 reserve : 13; // 预留位
//
//     U8 msgInfo1[12]; // 数据内容
//
//     unsigned char reserved : 7;        // 预留位
//     unsigned char receiveAntennas : 1; // 接收天线
//     U8 signLevel;                      // 信号电平
//     U8 msgInfo2_2;                     // 数据内容
//     U8 msgInfo2_1;                     // 数据内容
     /*************************之前的fpga传输结构****************************************/
} FPGA_TO_ADSB_FILE_ELEMENT;

// 大小为4字节
typedef struct
{
    U32 RCS : 4;  // RCS控制指令
    U32 TCS : 4;  // TCS控制指令
    U32 SAS : 4;  // SAS控制指令
    U32 Pad : 20; // 预留位
} XPDR_RELATED;

// 大小为4864Bytes
typedef struct
{
    U32 frameHeader;                                     // 帧头为0xA7A70001
    U32 frameNum;                                        // 帧号,从 1 开始，每次递增 1
    FAULT_REPORTED_BY_FPGA faultWord;                    // FPGA传递的故障字
    U32 adsbMsgCount;                                    // ADS-B 报文数量=N,超过 800 代表数据溢出
    FPGA_TO_ADSB_FILE_ELEMENT targets[MAX_ADSB_MSG_NUM]; // 报文信息
    U32 fpgaSelfCheck;                                   // fpga自检结果，预留
    XPDR_RELATED xpdrRelatedFields;                      // XPDR相关字段
    U8 PAD[32];                                          // 预留
    U32 crcCheck;                                        // CRC 校验
    U32 frameTail;                                       // 帧尾为0xB7B70001
} FPGA_TO_ADSB_FILE;

#pragma pack() // 一字节对齐
#endif
